The basic operations for dynamic random access memory (DRAM) include reading data, writing data, and refreshing of stored data. Modern DRAM cells must be refreshed periodically to prevent the loss or corruption of data stored by the memory cells, typically through leakage in the memory cells. Conventionally, periodic refreshes are performed on an entire rank, or alternatively on an entire bank in per-bank refresh operations. Thus, while being refreshed, either the entire rank, or the entire bank, is prevented from handling requests.
Self-refresh is a technique for DRAM refresh without requiring a memory controller to provide refresh commands. Typically, while in self-refresh mode, a self-refresh timer determines when a refresh is needed based on temperature information. When self-refresh mode is entered, the self-refresh timer starts from 0, and when self-refresh mode is exited, the self-refresh timer is reset. Because the status of refreshes is unknown when self-refresh mode is entered, a refresh is triggered upon each entry into self-refresh mode. This can lead to excess power consumption by unnecessary refresh operations when self-refresh mode is entered and exited in quick succession.